// 这里user模块的内容，自己实现
import { reqLogin, reqGetUserInfo, reqGetUserDetailById } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'

const state = {
  token: getToken() || null,
  // 用户资料
  userInfo: {}
}

// 重要原则：mutations中必须是同步的
const mutations = {
  setToken(state, newToken) {
    state.token = newToken
    // 将新token同步存储到本地
    setToken(newToken)
  },
  removeToken(state) {
    state.token = null
    // 同事清除本地的数据
    removeToken()
  },

  // 设置用户资料
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },

  // 移除用户资料(重置成空对象)
  removeUserInfo(state) {
    state.userInfo = {}
  }
}

const getters = {

}

const actions = {
  // 提供一个获取token的action
  // 注意点： promise内部封装时，不推荐使用async await的  （且用原生promise的语法可读性才更高）
//   login(context, data) {
//      return new Promise((resolve, reject) => {
//        // 一般可以封装一个异步操作
//     reqLogin(data).then(res => {
//       const newToken = res.data
//       context.commit('setToken', newToken)
//       resolve(res)
//     }).catch(error => {
//       reject(error)
//     })
//  })
//   },

  // 登录操作
  async login(context, data) {
    try {
      const res = await reqLogin(data)
      const newToken = res.data
      context.commit('setToken', newToken)
      return res
    } catch (err) {
      return Promise.reject(err)
    }
  },

  // 退出操作
  logout(context) {
  // 清除token
    context.commit('removeToken')
    // 清除个人信息
    context.commit('removeUserInfo')
  },

  // 提供一个获取个人信息的action
  //  async getUserInfo(context) {
  //      return new Promise((resolve, reject) => {
  //         reqGetUserInfo().then(res => {
  //      const { data } =res
  //      context.commit('setUserInfo', data)
  //      resolve(data)
  //  }).catch(error => {
  //    reject(error)
  //  })
  // })
  //   }

  // 获取用户信息的action

  async getUserInfo(context) {
    const { data: data1 } = await reqGetUserInfo()
    const { data: data2 } = await reqGetUserDetailById(data1.userId)
    const obj = {
      ...data1,
      ...data2
    }
    // console.log('拼接完成的两个对象的结果', obj)
    context.commit('setUserInfo', obj)
    return obj
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  getters,
  // 如果有异步操作，可以分发给action
  actions
}
